package com.linln.admin.core.thymeleaf;

import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.Set;

import org.thymeleaf.context.IExpressionContext;
import org.thymeleaf.expression.IExpressionObjectFactory;

import com.linln.admin.core.thymeleaf.utility.DictUtil;
import com.linln.admin.core.thymeleaf.utility.LogUtil;
import com.linln.admin.core.thymeleaf.utility.PageUtil;

/**
 * @author 小懒虫
 * @date 2018/8/14
 */
public class TimoExpressionObjectFactory implements IExpressionObjectFactory {

    public static final String   PAGE_UTIL_NAME   = "pageUtil";
    public static final PageUtil PAGE_UTIL_OBJECT = new PageUtil();
    public static final String   DICT_UTIL_NAME   = "dicts";
    public static final DictUtil DICT_UTIL_OBJECT = new DictUtil();
    public static final String   LOG_UTIL_NAME    = "logs";
    public static final LogUtil  LOG_UTIL_OBJECT  = new LogUtil();

    @Override
    public Set<String> getAllExpressionObjectNames() {
        Set<String> names = Collections
                .unmodifiableSet(new LinkedHashSet<>(Arrays.asList(PAGE_UTIL_NAME, DICT_UTIL_NAME, LOG_UTIL_NAME)));
        return names;
    }

    @Override
    public Object buildObject(IExpressionContext context, String expressionObjectName) {
        if (PAGE_UTIL_NAME.equals(expressionObjectName)) {
            return PAGE_UTIL_OBJECT;
        }
        if (DICT_UTIL_NAME.equals(expressionObjectName)) {
            return DICT_UTIL_OBJECT;
        }
        if (LOG_UTIL_NAME.equals(expressionObjectName)) {
            return LOG_UTIL_OBJECT;
        }
        return null;
    }

    @Override
    public boolean isCacheable(String expressionObjectName) {
        return expressionObjectName != null;
    }
}
